#include "CircularQueue.hpp"
#include <unistd.h>

void *PThreadFunc(void *arg) // 生产者
{
    int data = 1;
    CirQueue<int> *cq = static_cast<CirQueue<int> *>(arg);
    while (true)
    {
        std::cout << "生产了一个数据: " << data<< std::endl;
        cq->Equeue(data);
        data++;
       // sleep(1);
    }
    return nullptr;
}

void *CThreadFunc(void *arg) // 消费者
{
    CirQueue<int> *cq = static_cast<CirQueue<int> *>(arg);
    while (true)
    {
        sleep(1);
        int data = cq->Pop();
        std::cout << "消费了一个数据: " << data << std::endl;
    }
    return nullptr;
}

int main()
{
    CirQueue<int> cq(5); // 环形队列
    pthread_t p1, c1;

    pthread_create(&p1, nullptr, PThreadFunc, &cq);
    pthread_create(&c1, nullptr, CThreadFunc, &cq);

    pthread_join(p1, nullptr);
    pthread_join(c1, nullptr);

    return 0;
}